﻿using SeCompUFSCarWeb.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System.Security.Claims;
using System.Security.Principal;
using System.Web.Providers.Entities;
using System.Web.Security;

namespace SeCompUFSCarWeb.Evento
{
    public partial class Inscricao : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (VerificaInscricao())
                {
                    Response.Redirect("~/Evento/Inscrito.aspx");
                }
            }
        }
        
        protected void Inscrever_Click(object sender, EventArgs e)
        {
            //Instancia das variáveis que irão para o banco de dados
            //Inscrição
            int pacote = 0;
            int minicurso = 0;
            int soma = 0;
            string camiseta = "";
            string userId = Context.User.Identity.GetUserId();
            bool desafio = false;
            bool churrasco = false;
            bool marketing;

            //Interesses
            bool [] interesses = new bool[8];
            string outros;

            //Instancia das Classes Objeto
            SignUp inscrever;
            Interests interesse;

            //Preenche pacote [Modo Hard Code]
            foreach (RadioButton r in Pacotes.Controls.OfType<RadioButton>())
            {
                if (r.GroupName == "Pack" && r.Checked)
                {
                    switch (r.Text)
                    {
                        case "Free   R$ 0,00":
                            pacote = 0;
                            soma = 0;
                            break;
                        case "Hunger   R$ 10,00":
                            pacote = 1;
                            soma = 10;
                            break;
                        case "Study   R$ 15,00":
                            pacote = 2;
                            minicurso = 1;
                            soma = 15;
                            break;
                        case "Full   R$ 30,00":
                            pacote = 3;
                            minicurso = 1;
                            soma = 30;
                            break;
                        default:
                            Erro();
                            break;
                    }
                }
            }


            //Camiseta e Desafio
            if (pacote == 3)
            {
                foreach (RadioButton r in Shirt.Controls.OfType<RadioButton>())
                {
                    if (r.GroupName == "Camiseta" && r.Checked)
                    {
                        switch (r.Text)
                        {
                            case "P":
                                camiseta = "P";
                                break;
                            case "M":
                                camiseta = "M";
                                break;
                            case "G":
                                camiseta = "G";
                                break;
                            case "GG":
                                camiseta = "GG";
                                break;
                            default:
                                Erro();
                                break;
                        }
                    }
                }

                if (DesSim.Checked)
                    desafio = true;
                else
                    desafio = false;
            }

            //Churrasco e Marketing
            if (ChurrasSim.Checked)
            {
                churrasco = true;

                if (pacote == 3)
                    soma += 30;
                else
                    soma += 45;
            }
            else
                churrasco = false;

            if (JabaChk.Checked)
                marketing = true;
            else
                marketing = false;

            //Interesses
            //O vetor deve ser implementado na ordem em que aparece no banco e na página.
            interesses[0] = InteressesChk.Items[0].Selected;
            interesses[1] = InteressesChk.Items[1].Selected;
            interesses[2] = InteressesChk.Items[2].Selected;
            interesses[3] = InteressesChk.Items[3].Selected;
            interesses[4] = InteressesChk.Items[4].Selected;
            interesses[5] = InteressesChk.Items[5].Selected;
            interesses[6] = InteressesChk.Items[6].Selected;
            interesses[7] = InteressesChk.Items[7].Selected;
            outros = InteressesOutros.Text;

            //Salvar no BD
            inscrever = new SignUp(pacote, minicurso, soma, camiseta, userId, false, desafio, marketing, churrasco, DateTime.Now);
            interesse = new Interests(userId, outros, interesses[0], interesses[1], interesses[2], interesses[3], interesses[4], interesses[5], interesses[6], interesses[7]);

            if (inscrever.Insert())
            {
                interesse.Insert();
               
                //Preparação do Email de Confirmação
                var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
                var currentUser = manager.FindById(Context.User.Identity.GetUserId());

                string nome = currentUser.FullName;
                int numero = inscrever.NumeroInscricao();
                string email = Context.User.Identity.GetUserName();
                string epacote = "Free";
                string eminicurso = "Não";
                string echurrasco = "Não";
                string edesafio = "Não";
                

                switch (pacote)
                {
                    case 0:
                        epacote = "Free";
                        break;
                    case 1:
                        epacote = "Hunger";
                        break;
                    case 2:
                        epacote = "Study";
                        break;
                    case 3:
                        epacote = "Full";
                        break;
                    default:
                        break;
                }

                if (minicurso == 0)
                    eminicurso = "Não";
                else
                    eminicurso = "Sim";
                

                if (camiseta == "")
                    camiseta = "Não";
                if (churrasco)
                    echurrasco = "Sim";
                if (desafio)
                    edesafio = "Sim";

                EmailDeConfirmacao(nome, numero.ToString(), email, epacote, eminicurso, camiseta, echurrasco, edesafio, soma.ToString());
                Sucesso();
            }
            else
            {
                Erro();
            }
        }

        private void Erro()
        {
            Response.Redirect("~/Evento/Erro.aspx");
        }

        private void Sucesso()
        {
            Response.Redirect("~/Evento/Confirmacao.aspx");
        }

        private bool VerificaInscricao()
        {
            SignUp cadastro = new SignUp(Context.User.Identity.GetUserId());

            if (cadastro.NumeroInscricao() == 0)
                return false;
            else
                return true;
        }

        private bool EmailDeConfirmacao(string nome, string numero, string email, string pacote, string minicurso, string camiseta, string churrasco, string desafio, string valor)
        {
            string htmlCode = System.IO.File.ReadAllText(Server.MapPath("~/Emails/Inscricao.html"));

            htmlCode = htmlCode.Replace("#NOME",nome)
                .Replace("#NUMERO", numero)
                .Replace("#EMAIL", email)
                .Replace("#PACOTE", pacote)
                .Replace("#MINICURSO", minicurso)
                .Replace("#CAMISETA", camiseta)
                .Replace("#CHURRASCO", churrasco)
                .Replace("#DESAFIO", desafio)
                .Replace("#VALOR", valor);
            
            return Mail.Send(email, htmlCode, "Inscrição V SeComp UFSCar 2014");
        }
    }
}